package com.note.feng.leetcode.algorithms.easy.six;

public class SixHundredNinetyThree {
    /**
     * 693 交替位二进制数
     * 给定一个正整数，检查它的二进制表示是否总是 0、1 交替出现：换句话说，就是二进制表示中相邻两位的数字永不相同。
     *
     * 示例 1：
     *
     * 输入：n = 5
     * 输出：true
     * 解释：5 的二进制表示是：101
     * 示例 2：
     *
     * 输入：n = 7
     * 输出：false
     * 解释：7 的二进制表示是：111.
     * 示例 3：
     *
     * 输入：n = 11
     * 输出：false
     * 解释：11 的二进制表示是：1011.
     *  
     * 提示：
     *
     * 1 <= n <= 231 - 1
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/binary-number-with-alternating-bits
     */
    /**
     * 解法：模拟
     * 模拟整数转为二进制，先对 2 取模再除以 2 的方法，依次计算出二进制的每一位，
     * 若遇到联系两位相同，直接返回 false，否则返回 true
     * @param n
     * @return
     */
    public boolean hasAlternatingBits(int n) {
        int pre = 2;
        while (n != 0){
            int c = n % 2;
            if(c == pre){
                return false;
            }
            pre = c;
            n /= 2;
        }
        return true;
    }
}
